Documentation module.ini

INI, short for initialization, is a Microsoft standard for the initialization and configuration of programs. Use a basic text-editor such as Notepad for the INI file. This file is always local and modularized and contains various mod configuration settings and tells the game which BRFs to load. Following options in module.ini can be set (sorted in categories; marked with VC if introduced with Viking Conquest, NW with Napoleonic Wars):

Module General Parameters

Versioning

module_name = Calradia

string

is used for naming your module. The name will show up at the rgl_log.txt, so naming the module will make it easier to know which versions the player with the bug report is playing.[1]

module_version = 0

int

can be used for multiplayer and single player (saved game) module versioning.

compatible_module_version = 0

int

can be used for multiplayer module versioning.

compatible_multiplayer_version_no = 1170

int

current multiplayer version, used with compatible_module_version to determine if a player can connect to a server.

compatible_savegame_module_version = 0

int

can be used for single player (saved game) module versioning.

compatible_with_warband = 1

boolean

is most probably getting used to mark original M&B mods that can get played with M&B Warband too.

operation_set_version = 1.168

float

triggers the VC game key check if set to a value higher or equal than 1.160. This value can get called in-game by the operation get_operation_set_version.

works_with_version_max = 1011

int

deprecated, use compatible_savegame_module_version and module_version instead.

works_with_version_min = 1000

int

deprecated, use compatible_savegame_module_version and module_version instead.

Loading Resources

Outside of module configuration options, module.ini is also used to tell the engine which .BRF resources to load, and where to find them. The option load_resource is here commonly used for loading resources out of the Native game, so the folder CommonRes, while load_mod_resource and load_module_resource are getting used by modders to load newly added resources out of the module's resource folder.

load_resource = resource_name

Tells the engine that this resource (.BRF) exists in either the */CommonRes/ or */(module-name)/Resources/ folders. It doesn't seem to add to a much longer load times, but it is more inefficent than telling the engine where to look.

load_resource_nofast = resource_name

is the same as load_resource, no difference.

load_mod_resource = resource_name

explicitly tells the engine that this resource (.BRF) exists inside the */(module-name)/Resources/ folder. It should result in faster load times.

load_module_resource = resource_name

is an alternative syntax for load_mod_resource.

scan_module_sounds = 0

boolean

determines if the engine will scan the module's */Sounds/ folder.

scan_module_textures = 0

boolean

determines if the engine will scan the module's */Textures/ folder.

use_case_insensitive_mesh_searches = 0

boolean

determines if your module allows case insensitive references to mesh names i.e. sword_a and Sword_a being treated as the same reference.

Enabling Content

has_custom_battle = 0

boolean

determines if Custom Battle appears on the main menu.

has_multiplayer = 0

boolean

determines if Multiplayer appears on the main menu.

has_single_player = 1

boolean

determines if New Game and Load Game appear on main menu.

has_tutorial = 0

boolean

determines if Tutorial appears on the main menu.

enable_quick_battles = 1

boolean

determines if Quick Battles appears on the main menu. Quick Battles is the old 1.011 version of Custom Battles, so this flag works only at Vanilla M&B.

World Map Parameters

Map Constants

map_max_distance = 175.0

float

maximum amount of zoom out on the world map, maximum seems to be 251.

map_min_x = -180

int

determines the eastern bounds of the world map. The map can continue past this, but parties will not be able to travel past this boundary.

map_max_x = 180

int

determines the western bounds of the world map. The map can continue past this, but parties will not be able to travel past this boundary.

map_min_y = -145

int

determines the northern bounds of the world map. The map can continue past this, but parties will not be able to travel past this boundary.

map_max_y = 145

int

determines the southern bounds of the world map. The map can continue past this, but parties will not be able to travel past this boundary.

map_min_elevation = 0.2

float

sets the minimum distance the camera can be from the terrain in the world map. Controlls the angle too.

map_max_elevation = 1.0

float

sets the maximum distance the camera can be from the terrain in the world map.

map_river_direction = 140

int

angle used to determine the flow direction of the river shader for the world map.

map_river_speed_x = 0.01

float

used to determine the flow speed on the x-axis of the river shader for the world map.

map_river_speed_y = -0.01

float

used to determine the flow speed on the y-axis of the river shader for the world map.

map_sea_direction = -40

int

angle for the sea wave foam direction.

map_sea_wave_rotation = 300

angle

module.ini comment says "This is where the tear artefact is visible on the sea".

map_sea_speed_x = 0.02

float

used to determine the flow speed on the x-axis of the ocean shader for the world map.

map_sea_speed_y = -0.02

float

used to determine the flow speed on the y-axis of the ocean shader for the world map.

Just like at the world map terrain the map_trees material of map tree models is hard-coded, no matter what you set in the respective brf file. For the tree types: The game engine stores the number of tree types as set in the options below and tries to find as many tree type meshes in the resource files. The meshes in the brf-files need to be named accordingly to the tree type (regular, desert, snow, steppe) with an appended character to it, so for example map_tree_a, map_tree_b, etc. for regular trees and snow_tree_a, snow_tree_b, etc. for trees in snowy terrain. If there are not enough meshes given as the game engine expected due to the module.ini settings, the warning "Unable to find map [snow, desert, steppe] tree mesh %s" will show up at the rgl_log.txt. It is hard-coded into the game engine which tree type gets used at which terrain.

								
									rglMesh *treeMeshes[64];
rglMesh *snowTreeMeshes[64];
rglMesh *steppeTreeMeshes[64];
rglMesh *desertTreeMeshes[64];

ZeroMemory(treeMeshes, sizeof(treeMeshes));
ZeroMemory(snowTreeMeshes, sizeof(snowTreeMeshes));
ZeroMemory(steppeTreeMeshes, sizeof(steppeTreeMeshes));
ZeroMemory(desertTreeMeshes, sizeof(desertTreeMeshes));
g_moduleSettings.iMapTreeTypes = rglMin(g_moduleSettings.iMapTreeTypes, 64);
g_moduleSettings.iMapSnowTreeTypes = rglMin(g_moduleSettings.iMapSnowTreeTypes, 64);
g_moduleSettings.iMapSteppeTreeTypes = rglMin(g_moduleSettings.iMapSteppeTreeTypes, 64);
g_moduleSettings.iMapDesertTreeTypes = rglMin(g_moduleSettings.iMapDesertTreeTypes, 64);

rglString treeMeshName;

for (int i = 0; i < g_moduleSettings.iMapTreeTypes; ++i)
{
    treeMeshName = "map_tree_";
    treeMeshName.append('a' + i);
    treeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!treeMeshes)
        rglWarning("Unable to find map tree mesh %s", treeMeshName.c_str());
}

for (int i = 0; i < g_moduleSettings.iMapSnowTreeTypes; ++i)
{
    treeMeshName = "snow_tree_";
    treeMeshName.append('a' + i);
    snowTreeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!snowTreeMeshes)
        rglWarning("Unable to find map snow tree mesh %s", treeMeshName.c_str());
}

for (int i = 0; i < g_moduleSettings.iMapSteppeTreeTypes; ++i)
{
    treeMeshName = "steppe_tree_";
    treeMeshName.append('a' + i);
    steppeTreeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!steppeTreeMeshes)
        rglWarning("Unable to find map steppe tree mesh %s", treeMeshName.c_str());
}

for (int i = 0; i < g_moduleSettings.iMapDesertTreeTypes; ++i)
{
    treeMeshName = "desert_tree_";
    treeMeshName.append('a' + i);
    desertTreeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!desertTreeMeshes)
        rglWarning("Unable to find map desert tree mesh %s", treeMeshName.c_str());
}
								
									switch (face->m_regionType)
    {
    case rt_forest:
        treeSubMesh = treeMeshes[rglRandMod(g_moduleSettings.iMapTreeTypes)];
        break;
    case rt_snow_forest:
        treeSubMesh = snowTreeMeshes[rglRandMod(g_moduleSettings.iMapSnowTreeTypes)];
        break;
    case rt_steppe_forest:
        treeSubMesh = steppeTreeMeshes[rglRandMod(g_moduleSettings.iMapSteppeTreeTypes)];
        break;
    case rt_desert_forest:
        treeSubMesh = desertTreeMeshes[rglRandMod(g_moduleSettings.iMapDesertTreeTypes)];
        break;
    }

map_tree_types = 17

int

is the number of tree types that appear on the normal terrain, using the meshes map_tree_a through map_tree_r on for map trees. Equals the amount of forest tree models the map will randomly cycle through.

map_desert_tree_types = 4

int

is the number of tree types that appear on the desert terrain, equals the amount of desert tree models the map will randomly cycle through.

map_snow_tree_types = 3

int

is the number of tree types that appear on the snow terrain, equals the amount of snow tree models the map will randomly cycle through.

map_steppe_tree_types = 5

int

is the number of tree types that appear on the steppe terrain, equals the amount of steppe tree models the map will randomly cycle through.

Time and Date Parameters

starting_day

int

deprecated, use the script game_get_date_text instead.

starting_month

int

deprecated, use the script game_get_date_text instead.

starting_year

int

deprecated, use the script game_get_date_text instead.

time_multiplier = 0.25

float

speed with which time passes on the map screen. With 0.25 as default value 1 GAME hour is 4 seconds of REAL time, so in-game time passes 4 times slower than in real life (each hour in-game is equal to 1 second real life divided by the value of the time_multiplier). A value of 2.4 thus means that 1 in-game day takes 10 seconds IRL (or 1 second via CTRL+SPACE).

attribute_points_per_level = 0.195

float

VC, sets how many attribute points are gained per level, 1 in Native.

attribute_required_per_skill_level = 2

int

VC, sets how many attribute points are required per skill level, 3 in Native. According to Vjeffae the in-game maximum skill level is equal to the current base attribute level divided by this value (rounded down).

can_run_faster_with_skills = 0

boolean

determines how agility and athletics affect running speed. Upfollowing engine formula is given for it:

								
									if (rglConfig::Battle::bCanRunFasterWithSkills)
troopFactor = ((agility + athletics * 6.0f + 25.0f) * 30.0f / (weightFactor + 30.0f) + 90.0f) / 100.0f;
else
troopFactor = ((agility * 0.7f + athletics * 3.0f + 25.0f) * 70.0f / (weightFactor + 70.0f) + 90.0f) / 100.0f;

Written down for better readability:

								
									if can_run_faster_with_skills = 1
troopFactor = ((agility + athletics * 6 + 25) * 30 / (weightFactor + 30) + 90) / 100;
else
troopFactor = ((agility * 0.7 + athletics * 3 + 25) * 70 / (weightFactor + 70) + 90) / 100;

hero_wounded_treshold = 15

int

determines the minimum hitpoints needed for heroes to appear in battles and contribute to party skills.

hero_xp_multiplier = 2.0

float

sets the xp multiplier heroes gain by killing an enemy (max 10, perhaps 15).

level_boundary_multiplier = 2.0

float

VC, sets the multiplier for EXP needed for troop to upgrade, 1 in Native.

player_wounded_treshold = 5

int

determines the minimum number of hitpoints a player must have to appear in battles and contribute to party skills.

player_xp_multiplier = 2.0

float

sets the xp multiplier the player gains by killing an enemy (max 10, perhaps 15).

regulars_xp_multiplier = 3.0

float

sets the xp multiplier regular troops gain by killing an enemy (max 10, perhaps 15).

skill_leadership_bonus = 3

int

sets how many additional troops per leadership skill point the player can have in his party.

skill_points_per_level = 2

int

VC, sets how many skill points are gained per level, 1 in Native.

skill_prisoner_management_bonus = 5

int

sets how many additional prisoners per prisoner management skill point the player can have in his party.

track_spotting_multiplier = 0.8

float

multiplier of the tracking skill. If set to 0 no tracking marks will appear at the world map no matter the skill.

weapon_points_per_level = 5

int

VC, sets how many weapon proficiency points are gained per level, 10 in Native.

Item Parameters

display_wp_archery = 0

boolean

determines the visibility of the weapon proficiency Archery inside the character menu, but the weapons and the ability to use them still exists in the game. You can actually level them up, even if the display option is set to 0.[2]

display_wp_crossbows = 0

boolean

determines the visibility of the weapon proficiency Crossbows inside the character menu, but the weapons and the ability to use them still exists in the game. You can actually level them up, even if the display option is set to 0.

display_wp_firearms = 0

boolean

determines the visibility of the weapon proficiency Firearms inside the character menu, but the weapons and the ability to use them still exists in the game. You can actually level them up, even if the display option is set to 0.

display_wp_one_handed = 0

boolean

determines the visibility of the weapon proficiency One-Handed Weapons inside the character menu, but the weapons and the ability to use them still exists in the game. You can actually level them up, even if the display option is set to 0.

display_wp_polearms = 0

boolean

determines the visibility of the weapon proficiency Polearms inside the character menu, but the weapons and the ability to use them still exists in the game. You can actually level them up, even if the display option is set to 0.

display_wp_throwing = 0

boolean

determines the visibility of the weapon proficiency Throwing inside the character menu, but the weapons and the ability to use them still exists in the game. You can actually level them up, even if the display option is set to 0.

display_wp_two_handed = 0

boolean

determines the visibility of the weapon proficiency Two-Handed Weapons inside the character menu, but the weapons and the ability to use them still exists in the game. You can actually level them up, even if the display option is set to 0.

meek_modifier_speed_bonus = 0

float

sets the speed modifier value for the horses that have the meek-modifier.

timid_modifier_speed_bonus = 0

float

sets the speed modifier value for the horses that have the timid-modifier.

use_crossbow_as_firearm = 0

boolean

mostly depreciated, used for a workaround in WFaS or older mods where itp_crossbow was used instead of itp_musket and itp_pistol.[3] Replaces the loading animations of crossbows with the one of muskets. Particle effects and sounds need to get added manually with the item trigger ti_on_weapon_attack.

Party Parameters

auto_compute_party_radius = 1

boolean

VC, uses the party icon model to determine party radius. Especially important for modules with large town icons as it allows parties to interact with them in expected locations, as opposed to the center of the icon. Without it icons will disappear when their centre is off screen even though they should still be visible. For extremely large icons it fails to avoid 100 % of visual problems as the camera changes perspective. You need to test large icons in-game to ensure they are not too large.

base_companion_limit = 20

int

maximum amount of companions in the player party without leadership skill.

disable_disband_on_terrain_type = 0

int

used to ensure parties cannot disband on a certain tile (like passable water). The possible region types (rt) (only a single one can be chosen) are as follows:

								
									rt_ocean           = 0,
rt_mountain = 1,
rt_steppe = 2,
rt_plain = 3,
rt_snow = 4,
rt_desert = 5,
rt_bridge = 7,
rt_river = 8,
rt_mountain_forest = 9,
rt_steppe_forest = 10,
rt_forest = 11,
rt_snow_forest = 12,
rt_desert_forest = 13,
rt_shore = 21,
rt_foam = 22,
rt_waves = 23,

seeing_range = 6.5

float

determines the default seeing range of a party on the world map, the visibility radius.

show_party_ids_instead_of_names = 0

boolean

determines if a party's id value is shown above them instead of their name. Change to 1 for ease in module development.

use_strict_pathfinding_for_ships = 1

boolean

VC, keeps ships at sea for sea-to-sea routes.

Game Menus Parameters

auto_create_note_indices = 0

boolean

determines whether or not automatically search through all troops/factions/towns to check if they have note text.

disable_force_leaving_conversations = 1

boolean

disables the TAB end in conversations.

show_troop_upgrades_button = 0

boolean

VC, determines if the mod shows the troop upgrade button.

show_quest_notes = 1

boolean

determine if notes appear on the quest screen.

Others

can_adjust_camera_distance = 1

boolean

determines if the player can use numpad + and numpad - to adjust the default camera position.

has_accessories_for_female = 0

boolean

replaces at the Character Creation Screen the string ui_change_beard with the string ui_change_accessories if the player troop is assigned to the second skin entry (which is normally the female one). Mind that the string does only show up if the list of beard meshes at the second skin entry is not empty.

limit_hair_colors = 1

boolean

set to 1 if you don't have extra hair textures. Each human skin definition in Native uses hair_blonde along with vertex coloring. If you set the value to 0 the game expects to find for example a material and texture named hair_red, beard_black, etc.

show_faction_color = 1

boolean

determines if party names on the world map will show their faction color (1) or not (0). In latter case the names appear in a sort of brownish-white colour.

Battle Scene Parameters

Combat Parameters

crush_through_treshold = 2.4

float

determines how much damage is required to crush through overhead blocks on weapons which contain the flag itp_crush_through at their respective item entry.

According to module.ini comments all missiles with 'damage > shield_penetration_offset + shield_penetration_factor * shield' will penetrate a shield and cause damage to the wielder.

shield_penetration_factor = 3.0

float

used in conjunction with shield_penetration_offset to determine if a missile is powerful enough to penetrate a shield.

shield_penetration_offset = 30.0

float

used in conjunction with shield_penetration_factor to determine if a missile is powerful enough to penetrate a shield.

According to module.ini comments you can modify the damage system by editing the following values: The first three values (soak) determine the amount which will be directly subtracted from damage due to armor. The next three values (reduction) determine the percentage reduction from the damage. The same goes for extra_penetration factors which count only for weapons that contain the flag itp_extra_penetration at their item entry. Also, the soak can be negative, meaning that it will actually ADD to the damage, Not sure about the reduction, though in theory it should work the same way, but less violently.

armor_soak_factor_against_cut = 0.8

float

determines the amount which will be directly subtracted from cut damage due to armor.

armor_soak_factor_against_pierce = 0.65

float

determines the amount which will be directly subtracted from pierce damage due to armor.

armor_soak_factor_against_blunt = 0.5

float

determines the amount which will be directly subtracted from blunt damage due to armor.

armor_reduction_factor_against_cut = 1.0

float

determines the percentage reduction from the cut damage.

armor_reduction_factor_against_pierce = 0.5

float

determines the percentage reduction from the pierce damage.

armor_reduction_factor_against_blunt = 0.75

float

determines the percentage reduction from the blunt damage.

extra_penetration_factor_reduction = 1.0

float

determines the reduction factor against weapons with the flag itp_extra_penetration. A minimum value of 0 means that armour will be ignored. In Native no extra penetration flags are set, so set to '1.0' to keep them ineffective.

extra_penetration_factor_soak = 1.0

float

determines the soak factor against weapons with the flag itp_extra_penetration. A minimum value of 0 means that armour will be ignored. In Native no extra penetration flags are set, so set to '1.0' to keep them ineffective.

According to module.ini comments damage below this threshold levels will not interrupt melee attacks.

damage_interrupt_attack_threshold = 3.0

float

damage below this will not interrupt melee attacks.

damage_interrupt_attack_threshold_mp = 1.0

float

damage below this will not interrupt melee attacks in multiplayer.

ai_decide_direction_according_to_damage = 1

boolean

when set to 1, the AI will take into consideration what each directional attack's damage will be when deciding what attack to use.

apply_all_ammo_damage_modifiers = 1

boolean

VC, allows all ammo to apply Blunt/Sharp/Cutting modifier damage.

brace_rotation_limit = 0.012

float

affects items with the flag itp_is_pike and is used for rotation speed limiting while bracing spears (e.g. in NW). If the absolute turn amount is less than 0.01 or the set value (whichever is higher) the game engine plays the pike crouch animation (anim_crouch_pike) and otherwise the crouch staff animation (anim_crouch_staff). You can obviously not give a value below the default one of 0.01 and if you provide a big value (it seems like 0.5 is enough) you can completely override the canceling effect.

couched_lance_damage_multiplier = 0.65

float

determines how much additional damage a couched lance will do. Set to 0.65 inNative.

disable_attack_while_jumping = 0

boolean

determines if an agent can attack while jumping and if attacks should be interrupted when the agent starts jumping.

disable_zoom = 0

boolean

determines whether or not the player can use gk_zoom (for usual 'shift') to narrow the camera's field of vision. Can get checked in-game with the operation is_zoom_disabled.

fall_damage_multiplier = 1.0

float

used to determine how much damage is applied from falling. Airtime is otherwise probably the deciding factor for the falling damage.[4]

horse_charge_damage_multiplier = 1.0

float

used to scale the charge damage inflicted by horses when ramming into human agents.

lance_pike_effect_speed = 3.0

float

determines the necessary speed of the horse at which the pike triggers the animation anim_horse_rear.

melee_damage_speed_power = 2.0

float

setting speed_power to 2.0 makes damage scale with the square of weapon's speed. You can set it to 1.0 to make it scale linearly.

missile_damage_speed_power = 1.9

float

setting speed_power to 2.0 makes damage scale with the square of missile's speed. You can set it to 1.0 to make it scale linearly.

no_friendly_fire_for_bots = 0

boolean

determines if AI agents in Mutiplayer can cause friendly fire.

Battle Parameters

battle_size_min = 150

int

VC; minimum battle size for module.

battle_size_max = 750

int

VC, maximum battle size for module.

far_plane_distance = 5000

float

the amount of units (in centimeters) that the render plane extends out from the camera inside of scenes, default is 1250. It's the maximum distance (in meters) in which an object will render for an user. Enlarge this value if you want to use bigger/better/longer border terrains and have the player be able to view them.

Physics Parameters

air_friction_arrow = 0.002

float

sets the drag coefficient. At Native the value is set to 0.002.

air_friction_bullet = 0.002

float

sets the drag coefficient, but specifically on missiles shot by firearms. At Native the value is set to 0.002.

Others

consider_weapon_length_for_weapon_quality = 1

boolean

VC, makes agents take into account a weapon's length when choosing a weapon at their inventory, giving longer weapons a higher probability to be chosen.

disable_moveable_flag_optimization = 0

boolean

assign '1' for moveable physics on all scene props; no sokf_moveable flag will be needed at them.[5]

mission_object_prune_time = 180

int

seconds required before a scene_prop like a fired arrow or a dropped item is removed from the scene. Setting it to 0 will prevent the items from despawning during a mission which is however not recommend for performance reasons. Note that this won't apply to items which are spawned via code.[6]

Other Parameters and Details

Enabling Features

can_crouch = 0

boolean

determines if human agents can crouch. You will need to add the string 'ui_crouch|Crouch:' at your ui.csv to make it displayed correctly at the Gamekey config menu.[7]

can_objects_make_sound = 0

boolean

determines if scene props can emit sounds inside a scene.

can_reload_while_moving = 0

boolean

determines if agent can reload crossbows while running or walking. Does not affect horseback. Requires use_crossbows_as_firearms to be enabled as well.[8]

can_use_scene_props_in_single_player = 0

boolean

determines if singleplayer agents can interact with scene props the same way as at the multiplayer modi (using doors and drawbridges).

disable_food_slot = 1

boolean

mostly depreciated, can be changed to 0 if you want to keep the food slot in inventory window. Used in very old versions of M&B (still working in Warband though!) to choose what food item the party can eat. Putting a horse into it lets the horse be slaughtered.

has_forced_particles = 0

boolean

allows the mod to 'force' particles. Probably used in instances where turning off particle effects would give undue benefit to a player, such as thick musket smoke.

horses_rear_with_attack = 1

boolean

determines if horses rear upon being struck with enough damage.

horses_try_running_away = 0

boolean

determines if riderless horse agents will try to get away from aggressive agents.

num_hints = 12

int

total number of hints visible on the secondary loading screen.

shorter_pistol_aiming = 1

boolean

VC, adds pistols to the exception just like in crossbow and muskets.

use_advanced_formation = 0

boolean

determines if the module uses Native's advanced formations from NW/WFaS (1) or Native (0). Those add extensions to the order menus related to formations and weapon usage. Players can then let the troops line up from one row to five rows and order their archers to fire at their command. Some lines need to be added to ui.csv for this.[9] For the menu order these are:[10]

								
									ui_order_form_1_row|Form one row
ui_order_form_2_row|Form two rows
ui_order_form_3_row|Form three rows
ui_order_form_4_row|Form four rows
ui_order_form_5_row|Form five rows
ui_order_button_fire_at_my_command|Fire at my command
ui_order_button_all_fire_now|All, Fire now
ui_order_button_left_fire_now|Left, Fire now
ui_order_button_middle_fire_now|Middle, Fire now
ui_order_button_right_fire_now|Right, Fire now
ui_order_button_weapon_usage_orders|Equipment orders
ui_order_button_use_melee_weapons|Use melee weapons
ui_order_button_use_ranged_weapons|Use ranged weapons

and for the shouting order display:

								
									ui_form_1_row_e_|%s, Form one row
ui_form_2_row_e_|%s, Form two rows
ui_form_3_row_e_|%s, Form three rows
ui_form_4_row_e_|%s, Form four rows
ui_form_5_row_e_|%s, Form five rows
ui_fire_at_my_command_e_|%s, Fire at my command
ui_all_fire_now_e_|%s, fire now
ui_left_fire_now_e_|%s, left side fire
ui_middle_fire_now_e_|%s, middle fire
ui_right_fire_now_e_|%s, right side fire
ui_use_melee_weapons_e_|%s, use melee weapons
ui_use_ranged_weapons_e_|%s, use ranged weapons

use_phased_reload = 0

boolean

determines if reloading for muskets and pistols can be done in steps. That means if your reload has been interrupted, you'll start from the begining of the phase at which the reload was stopped. Phased reload works if you use itcf_reload_musket or itcf_reload_pistol for the ranged weapon.

Graphical Parameters

add_set_neighbors_to_tangent_flag_to_shader = 1

boolean

Shader Parameter. Appears to pass along information about neighboring faces tangents. No examples are found in Native.

blood_multiplier = 6.0

float

VC, determines the amount (and size?) of blood particle effects.

disable_high_hdr = 0

boolean

if set to '1' disables high HDR effects in the module.

fix_gamma_on_dx7_operation_colors = 1

boolean

Shader Parameter, used for set_startup_ambient_light and set_startup_ground_ambient_light operations. Below decompiled code:

								
									if ( !rgl_HLSL_mode && dword_AA35C4C )
{
*(float *)v2430 = a2;
v1304 = sqrtf(*(float *)v2430);
v1305 = cur_game;
*(float *)(v2460 + 408) = v1304;
*((float *)v1305 + 103) = sqrtf(*((float *)v1305 + 103));
v1306 = cur_game;
a2 = sqrtf(*((float *)cur_game + 104));
v1298 = cur_mission;
LODWORD(v2460) = cur_game;
*((float *)v1306 + 104) = a2;
}

use_bordered_shadow_sampler = 1

boolean

Shader Parameter. Unused by engine.

screenshot_format = 1

boolean

allows modders to set the screenshot file format when pressing Ctrl + Insert which are getting saved in .../Mount&Blade Warband/Screenshots/<Name of Module>. Set 0 for jpg (default), 1 for png and 2 for bmp.[11]

Multiplayer Parameters

multiplayer_walk_enabled = 0

boolean

determines if the players on a multiplayer server can use gk_walk to walk instead of run. Important for NW style line battles. disable_zoom needs to be set to 1, otherwise zoom takes precedence at 'shift' (a zooming player always walks, you just see it with zoom disabled? Up4research).

restrict_attacks_more_in_multiplayer = 0

boolean

if an agent is stabbing or doing an overhead attack then the limit of the rotational speed will either be set to 11 (if set to 1) or 16 (if set to 0, default). This forces a more restricting attacking method in multiplayer and should be able to keep spamming and feinting to a minimum.

show_multiplayer_gold = 0

boolean

determines if the player's gold is shown in multiplayer. Only the text with the gold amount won't get displayed, the gold icon itself will still be present.

sync_block_directions = 0

boolean

determines if block directions are synced between client and server.

sync_ragdoll_effects = 0

boolean

determines if ragdolls are synced between client and server.

Performance and Logs

dont_supress_initial_warnings = 1

boolean

should be set to 1 for debugging purposes and 0 for public releases. It should be used to hide loading warning for modules in the rgl_log.txt like the following one:

								
									rgl_post_warning_line: WARNING: Unable to find material for mesh prt_mod_weapon_aim
								
							

give_performance_warnings = 1

boolean

if enabled, it triggers warning messages for overly complex collision meshes on dynamic physical objects. It gives at the appropriate occasions the warnings "Default game_variables.txt cannot be loaded, make sure you have Native module installed or set all game variables!" and "Performance Warning: Using dynamic physics with triangular meshes can decrease performance!".

maximum_number_of_notification_messages = 4

int

VC, number of messages in battle, common are 10.

reduce_texture_loader_memory_usage = 0

boolean

should improve loading time by making it multithread.

supports_directx_7 = 1

boolean

determines if your module supports directx7 mode. Necessary for very old PCs.

use_scene_unloading = 1

boolean

VC, once you leave the scene, it's unloaded from your computer RAM. If you want to go back to this scene quickly, you will have to load it again. Loading of frequently visited scenes will be slower but it will save some of your RAM.

use_texture_degration_cache = 0

boolean

should improve loading times but generates cache files. When you tab out for too long, the game de-loads most of the textures and replaces them with those microtextures. This was the case in earlier versions too but the game didn't save them to the disk.[12]

Savegames

dont_load_regular_troop_inventories = 1

boolean

determines if the game saves inventories for regular troops (i.e. not heroes) too. Also, savegames will be a bit bigger and may thus crash.